"> Fric-frac CountryController
Home

Fric-frac CountryController

Fric-frac CountryController

We volgen hetzelfde patroon als voor Fric-frac PersonController.

De CountryController klasse dispatcht alle request die verband houden met het beheer van de Country entiteit. Dat komt neer op het afhandelen van alle use cases die we hebben opgesteld voor het beheren van de entiteit Country, o.a.:

De CountryController klasse

  1. Maak een nieuwe Controller klasse in de Controllers map. Hoe je dat doen hebben we geleerd in Fric-frac AdminController.
  2. Kies ervoor om een MVC Controller Class te maken en geef er de naam CountryController.cs aan.
  3. Injecteer de DBContext in de constructor:
    namespace FricFrac.Controllers
    {
        public class CountryController : Controller
        {
            private readonly Docent300Context dbContext;
            // voeg constructor toe om geïnjecteerde DBContext
            // te kunnen binnenkrijgen in deze klasse
            public CountryController(Docent300Context dbContext)
            {
                this.dbContext = dbContext;
            }
  4. We beginnen met methoden die de bedoeling hebben een input view aan de gebruiker te tonen. We wijzigen of voegen daarvoor de volgende methoden toe:
    1. De Index methode

      De Index methode handelt de Country/Index use case af. We raadplegen Fric-frac Use Case Person Index om nog eens na te gaan wat die methode precies moet doen. Aan de view geven we de lijst van de landen mee:

      // GET: /<controller>/
      public IActionResult Index()
      {
          ViewBag.Title = "Fric-frac Country Index";
          return View(dbContext.Country.ToList());
      }
    2. De InsertingOne methode toevoegen

      Om naar de InsertingOne view te kunnen navigeren moeten we de use case /Country/InsertingOne die staat op de Index.cshtml pagina implementeren. Daarvoor moeten we een methode maken in de CountryController klasse die het klikken op de link in Index.cshtml afhandelt. De naam van de methode moet de afspraken, die gelden binnen het MVC framework, moet dus InsertingOne zijn. Dat is dezelfde naam als het twee deel van de URL. Het eerste deel van de URL verwijst naar de naam van de controller. We geven de lijst van de landen aan de view mee:

      public IActionResult InsertingOne()
          {
          ViewBag.Title = "Fric-frac Country Inserting One";
          return View(dbContext.Country.ToList());
      }
    3. De ReadingOne actiemethode toevoegen

      Om naar de ReadingOne pagina te kunnen navigeren moeten we de use case /Country/ReadingOne, die staat op de op alle pagina's waarop een lijst met landen staat waaruit een land geselecteerd kan worden, implementeren. Daarvoor moeten we een methode maken in de CountryController klasse die het klikken op de select link <a href = "/Country/ReadingOne_XX"> afhandelt. De XX staat voor de Id van de rij. De naam van de methode, geheel volgens de afspraken binnen het MVC framework, is dus ReadingOne. Dat is dezelfde naam als het twee deel van de URL. Het eerste deel van de URL verwijst naar de naam van de controller. Deze naam is de naam van de actiemethode in de CountryController klasse en de naam van de view die door deze methode geretourneerd wordt. Met behulp van Linq halen we de gewenste rij op en geven het object door aan de view:

      [HttpGet]
      public IActionResult ReadingOne(int? id)
      {
          ViewBag.Message = "Insert een land in de database";
          if (id == null)
          {
              return NotFound();
          }
      
          var country = dbContext.Country.SingleOrDefault(m => m.Id == id);
          if (country == null)
          {
              return NotFound();
          }
          return View(country);
      }
    4. De UpdatingOne actiemethode toevoegen

      Om naar de Updating pagina te kunnen navigeren moeten we de use case /Country/UpdatingOne/XX, die staat op de ReadingOne pagina staat, implementeren. Daarvoor moeten we een methode maken in de CountryController klasse die het klikken op de select link <a href = "/Country/UpdatingOne/XX"> afhandelt. De XX staat voor de Id van de rij. De naam van de methode, geheel volgens de afspraken binnen het MVC framework, is dus UpdatingOne. Dat is dezelfde naam als het twee deel van de URL. Het eerste deel van de URL verwijst naar de naam van de controller. Deze naam is de naam van de actiemethode in de CountryController klasse en de naam van de view die door deze methode geretourneerd wordt. De link, die deze use case in gang zet, De html code daarvoor ziet er zo uit:

      <a href="/Country/UpdatingOne/@Model.Id" class="tile">
          <span class="icon-pencil"></span>
          <span class="screen-reader-text">Updating One</span>
      </a>

      We implementeren nu de actiemethode UpdatingOne in de CountryController klasse. De methode krijgt als argument de Id van de te zoeken rij mee.

      [HttpGet]
      public IActionResult UpdatingOne(int? id)
      {
          ViewBag.Title = "Fric-frac Country Updating One";
          if (id == null)
          {
              return NotFound();
          }
      
          var country = dbContext.Country.SingleOrDefault(m => m.Id == id);
          if (country == null)
          {
              return NotFound();
          }
          return View(country);
      }
    5. De Cancel methode toevoegen

      Met de Cancel knop keert de gebruiker terug naar de Index view:

      public IActionResult Cancel()
      {
          return RedirectToAction("Index");
      }
  5. De CRUD methoden
    1. InsertOne

      Om een rij aan de tabel te kunnen toevoegen moeten we eerst het Country model binden aan de input van de gebruiker. In het Country model hebben we aangeven met welk name attribuut een property overeenkomt:

      [FromForm(Name = "Country-Name")]

      ASP.NET MVC is daardoor in staat automatisch de inputvelden van de form te binden aan het model:

      [HttpPost]
      public IActionResult InsertOne(Models.FricFrac.Country Country)
      {
          ViewBag.Message = "Insert een land in de database";
          dbContext.Country.Add(Country);
          dbContext.SaveChanges();
          return View("Index", dbContext.Country);
      }
    2. UpdateOne
      [HttpPost]
      public IActionResult UpdateOne(Models.FricFrac.Country country)
      {
          if (ModelState.IsValid)
          {
              try
              {
                  dbContext.Update(country);
                  dbContext.SaveChanges();
                  return View("ReadingOne", country);
              }
              catch (DbUpdateConcurrencyException)
              {
                  if (!dbContext.Country.Any(e => e.Id == country.Id))
                  {
                      return NotFound();
                  }
                  else
                  {
                      throw;
                  }
              }
          }
          return View("Index", country);
      }
    3. DeleteOne
      // GET: Supplier/Delete/5
      public IActionResult DeleteOne(int? id)
      {
          if (id == null)
          {
              return NotFound();
          }
          // zoek het land dat verwijderd moet worden
          var country = dbContext.Country.SingleOrDefault(m => m.Id == id);
          if (country == null)
          {
              return NotFound();
          }
          dbContext.Country.Remove(country);
          dbContext.SaveChanges();
          // keer terug naar de index pagina
          return RedirectToAction("Index");
      }

JI
2018-01-21 13:37:26